#SPC 直方图导出脚本
#-------------------------
#构建数据函数
fun.buildData <- function(..., datas=NULL) {
    itemDatas <- c(list(...), datas)
    return(itemDatas)
}

#-------------------------
#构建直方图函数
library(ggplot2)
fun.createHistogram <- function(xdatas=NULL) {
    # required(ggplot2)

    # #构建list, 参数...作为构建基础
    if (is.null(xdatas)) {
        print("No data for building.")
        return(NULL)
    }
    #
    # #itemDatas <- xdatas
    numDatas <- length(xdatas)
    plots <- list()
    for (i in 1:numDatas) {
        x <- xdatas[[i]]$data
        t <- xdatas[[i]]$title
        #  print(t)
        #  #数据分组数
        n <- ceiling(sqrt(length(x)))
        #
        #  #x坐标标签集合
        dv <- seq(min(x), max(x), by=(max(x)-min(x))/n)
        #
        #  #排序后的原始数据
        cx <- sort(x)
        #  #趋势图的y值
        cy <- dnorm(cx, mean(cx), sd(cx))
        dc <- data.frame(x=cx, cy=cy)
        #
        #  #直方图x坐标区间(步长)
        binsize <- (max(x)-min(x))/n
        #
        #  #构建图形
        p <- ggplot(dc)
        p <- p + geom_histogram(aes(x=x), binwidth=binsize, fill="#305d8c",colour="white",origin=min(x),alpha=0.9)
        p <- p + geom_line(aes(x=x,y=cy), colour="red")
        p <- p + scale_x_continuous(breaks=dv,labels=dv)
        p <- p + theme(axis.text.x=element_text(angle=30,size=6,hjust=1,vjust=1))
        p <- p + xlab("")
        p <- p + ylab("Count")
        p <- p + ggtitle(t)

        plots <- c(plots,list(p))
    }
    return(plots)
}

#-------------------------
#将直方图导出到pdf文件
fun.trans2pdf <- function(..., plotlist=NULL, file) {
    # Make a list from the ... arguments and plotlist
    plots <- c(list(...), plotlist)

    files <- c()
    numPlots <- length(plots)

    if(is.null(file)) {
        file <- "export"
    }
    if(is.null(fileType)) {
        fileType <- "pdf"
    }
    prename <- format(Sys.time(),"%Y%m%d_%H%M%S")
    file <- paste(file,"_", prename, ".", fileType, sep="", collapse = NULL)

    pdf(file, width=7, height=4.27)

    # Make each plot, in the correct location
    for (i in 1:numPlots) {
        print(plots[i])
    }
    dev.off()

    return(file)
}

#-------------------------
#将code变量中的字符串作为R的语句执行,产生x数据源集合items
#等同于items <- fun.buildData()
eval(parse(text=code))

plots <- fun.createHistogram(xdatas=items)
file <- fun.trans2pdf(plots, file=fileName)


